#!/usr/bin/perl
# Copyright (C) 2011-2013 Zentyal S.L.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License, version 2, as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

use strict;
use warnings;

use EBox;
use EBox::Config;
use EBox::Global;
use EBox::Sudo;
use EBox::Util::SQL;
use TryCatch;

my $restart = 1;
if ($ARGV[0] eq '--no-restart') {
    $restart = 0;
    shift (@ARGV);
}

my ($modname, $version) = @ARGV;

EBox::init();

EBox::Util::SQL::createModuleTables($modname);

# Copy purge-module script if exists
my $purgeSrc = "/usr/share/zentyal-$modname/purge-module";
if (EBox::Sudo::fileTest('-f', $purgeSrc) ) {
    my $purgeDst = "/var/lib/zentyal/purge-module/$modname";
    EBox::Sudo::root("cp '$purgeSrc' '$purgeDst'");
    EBox::Sudo::root("chmod 0750 '$purgeDst'");
}

my $module = EBox::Global->modInstance($modname);

$module->redis->begin();

$module->initialSetup($version);

# Run migrations only if upgrading
if ($version) {
    $module->migrate($version);
}

try {
    $module->saveConfigRecursive();
    $module->save() if ($restart);
    $module->redis->commit();
} catch {
    $module->redis->rollback();
    EBox::warn("Restart for $modname failed");
}

exit 0;
